package Persistencia;



import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Vector;

import com.sun.org.apache.bcel.internal.generic.GETSTATIC;


import Modelo.Adicional;
import Modelo.Base;
import Modelo.Cliente;
import Modelo.Dato;
import Modelo.Linea;
import Modelo.LineaAdicional;
import Modelo.LineaTitular;
import Modelo.PaquetedeServicios;
import Modelo.Plan;
import Modelo.Prepago;
import Modelo.SMS;
import Modelo.Servicio;
import Modelo.Voz;


public class AdministradorPersistenciaLineas 
{
	private static AdministradorPersistenciaLineas pool;
	
	
	private AdministradorPersistenciaLineas()
	{
		
	}
	
	public static AdministradorPersistenciaLineas getInstancia()
	{
		if (pool== null)
			pool =new AdministradorPersistenciaLineas();
		return pool;
	}
	
	public void insertLineaAdic(LineaAdicional unaLineaAdicional, String dni)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "INSERT INTO linea (usuario_id, plan_id, numero, fecha_contrato, tipo, nombre_adicional) VALUES (?,?,?,?,?,?)" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, dni);
			ps.setInt(2,unaLineaAdicional.getPlan().getNroPlan());
			ps.setInt(3,unaLineaAdicional.getNumero());
			ps.setString(4, unaLineaAdicional.getFechaContratoString());
			ps.setString(5, unaLineaAdicional.getTipoLinea());
			ps.setString(6, unaLineaAdicional.getNombreAdicional());
			ps.execute();		
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar una Linea: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Linea: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
	}
	
	
	public void insertLineaTitular(LineaTitular unaLineatitular, String dni)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "INSERT INTO linea (usuario_id, plan_id, numero, fecha_contrato, tipo, nombre_adicional) VALUES (?,?,?,?,?,'')" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, dni);
			ps.setInt(2,unaLineatitular.getPlan().getNroPlan());
			ps.setInt(3,unaLineatitular.getNumero());
			ps.setString(4, unaLineatitular.getFechaContratoString());
			ps.setString(5, unaLineatitular.getTipoLinea());
			System.out.println(unaLineatitular.getFechaContratoString());
			ps.execute();		
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar una Linea: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Linea: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
	}
	
	
	public Linea getlineaPorId(int idLinea)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		 Linea unaLinea = null;
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "select * from linea where numero = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, idLinea);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{
				if (result.getString("tipo").equalsIgnoreCase("TITULAR"))
				{
				  unaLinea = new LineaTitular(result.getInt("numero"), result.getString("tipo"), AdministradorPersistenciaPlanes.getInstancia().getPlanPorId(result.getInt("plan_id")));
				}
				else if (result.getString("tipo").equalsIgnoreCase("ADICIONAL"))
				{
				  unaLinea = new LineaAdicional(result.getInt("numero"), result.getString("tipo"), AdministradorPersistenciaPlanes.getInstancia().getPlanPorId(result.getInt("plan_id")), result.getString("nombre_adicional"));
				}
			}
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return unaLinea;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar una Linea: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Linea: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
		return unaLinea;
	     
		
		
		
	}
	
	

	public void insertConsumoALinea(Linea unaLinea)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "INSERT INTO Consumos (servicio_id, linea_id, fecha, cantidad_consumida, destino, facturado) VALUES (?,?,?,?,?,?)" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			
			for (int i = 0; i < unaLinea.getConsumos().size(); i++) 
			{ 
				ps = con.prepareStatement(senten);
				ps.setInt(1, unaLinea.getConsumos().elementAt(i).getServicio().getId());
				ps.setInt(2, unaLinea.getNumero());
				ps.setString(3,String.valueOf(unaLinea.getConsumos().elementAt(i).getFecha()));
				ps.setInt(4, unaLinea.getConsumos().elementAt(i).getCantUnidadesCons());
				ps.setString(5, unaLinea.getConsumos().elementAt(i).getDestino());
				ps.setInt(6, 0);
				ps.execute();
			} 
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar una Linea: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Linea: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
	}
	
	
	
	
	
	
	
}
